<?php
require('config.php');
require('include.php');

use qcloudcos\Cosapi;

Cosapi::setTimeout(180);
Cosapi::setRegion('sh');

foreach($dbback_list as $key=>$val)
{
	$file_name = $val['dbname'].date("Ymd").".sql";
	$command = "mysqldump -h".$val['server_ip']." -u".$val['db_user']." -p".$val['db_password']." ".$val['dbname']." > ".$file_name;
	exec($command);
	
	//如果备份成功 执行mysqldump命令成功
	if(is_file($src_path.$file_name) && filesize($src_path.$file_name) > 0)
	{
		//开始上传文件
		$return_flag = uploadDbBackFile($file_name,$val['server_ip'],$val['dbname']);
		//文件上传成功
		if($return_flag==true)
		{
			unlink($file_name);
		}
	}else{
		//输出备份失败的错误日志
		writeDebugInfo("bakerr",$val['server_ip'],$val['dbname']);
	}
}

/**
 * 数据库备份文件的上传
 * 本次上传至腾讯云的云存储中
 */
function uploadDbBackFile($file_name,$server_ip,$db_name)
{
	global $src_path,$dst_path,$bucket;
	
	$tmp_src_path = $src_path.$file_name;//需要上传的源文件的路径
	$tmp_dst_path = $dst_path.$file_name;//上传至腾讯云的路径
	
	$ret = Cosapi::upload($bucket, $tmp_src_path, $tmp_dst_path);
	//解析腾讯云的SDK的返回值
	if($ret['code']=="0" && $ret['code']=="success")
	{
		//上传成功，输出正常的日志信息
		writeDebugInfo("ok",$server_ip,$db_name);
		return true;
	}else{
		//上传失败，输出错误的日志信息
		writeDebugInfo("err",$server_ip,$db_name);		
		return false;
	}
}

/**
 * 输出备份日志
 * $flag:输出日志的类型   ok：正常日志；err:错误日志
 * $server_ip:服务器的IP地址
 * $db_name：数据库名称
 */
function writeDebugInfo($flag="ok",$server_ip,$db_name)
{
	global $root_path;
	
	$current_time = date("Y-m-d H:i:s");//当前时间
	
	//输出正常信息
	if($flag=="ok")
	{
		$file_name = "dbback_log".date("Ymd")."_ok.log";
		$data = "服务器：".$server_ip."上的【".$db_name."】数据库备份成功！完成时间：".$current_time.PHP_EOL;
	}elseif($flag=="err"){
	//输出错误信息
		$file_name = "dbback_log".date("Ymd")."_error.log";
		$data = "服务器：".$server_ip."上的【".$db_name."】数据库上传失败！上传时间：".$current_time.PHP_EOL;
	}elseif($flag=="bakerr"){
	//输出错误信息
		$file_name = "dbback_log".date("Ymd")."_bak_error.log";
		$data = "服务器：".$server_ip."上的【".$db_name."】数据库备份失败！备份时间：".$current_time.PHP_EOL;
	}
	
	$log_file = $root_path."/log/".$file_name;
	file_put_contents($log_file, $data,FILE_APPEND);
}
?>